Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pseudorandomowe liczby


Rekomendowane odpowiedzi

Opublikowano

Witam, mam pewien problem.
Tworzę prostę grę na lekcję, ale mam kłopot z 2 rzeczami.

1. Chcę wylosować 4 liczby w przedziale od 0 do 9. Ogarniam to trochę, ale nie wiem jaki warunek muszę postawić, by liczby nie były takie sam, np.
Losuje mi 9, 0, 4, 9. Chcę, aby liczby się nie powtarzały.

2. Mam w kodzie coś takiego :

if(z1==c1)
		{
			cout<<"Prawidlowa"<<endl;
		
			if(z1==c2)
			{
				cout<<"Nie te miejsce"<<endl;
			}
				
				if(z1==c3)
				{
					cout<<"Nie te miejsce"<<endl;
				}
					
					if(z1==c4)
					{
						cout<<"Nie te miejsce"<<endl;
					}
						if(z1!=c1||c2||c3||c4)
						{
							cout<<"Nieprawidlowa"<<endl;
						}

z1 = Wpisana liczba

c1/2/3/4 = Wylosowana liczba

 

Nie wiem czy to jest do końca czytelne, ale chcę zrobić coś takiego :

Jeżeli wpisana pierwsza liczba równa się wylosowanej pierwszej liczbie wyświetla napis "Prawidlowa".
Jeżeli wpisana pierwsza liczba równa się wylosowanej drugiej/trzeciej/czwartej wyświetla się napis "Nie te miejsce"

Jeżeli wpisana pierwsza liczba nie została wylosowana w ogóle wyświetla się napis "Nieprawidlowa"

Opublikowano

Najprostsze i najlepsze rozwiązanie w tym przypadku to utworzenie tablicy ze wszystkimi możliwymi wartościami (czyli 10 elementów, od 0 do 9), wykonanie na niej shuffle (http://en.cppreference.com/w/cpp/algorithm/random_shuffle) i wybrać n pierwszych elementów (tutaj nawet nie potrzebujesz tego robić. Wystarczy, że będziesz porównywał do kolejnych elementów tablicy).

Opublikowano

 

jeżeli chcesz by to co podał ^up działało musisz zaktualizować by Twoje IDE wspierało c++11. Sądząc po formatowaniu kodu to używasz dev-cpp.

http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Losowanie-bez-powtorzen/293

Jest kilka wersji tej funkcji, a pierwsza jest co najmniej od c++03

Opublikowano

Żadne z tych mi nie działa.
Poza tym gdybym wylosował te liczby za pomocą random_shuffle to mógłbym przypisać każdej z tych liczb zmienną?
I ktoś coś jakoś na temat drugiego problemu?

Opublikowano

tablice, tablice i jeszcze raz tablice

@@

jak ci może nie działać, dostałeś gotowy kod z tutorialem po POLSKU jak zrobić, to za mało?

Opublikowano

Jestem po prostu załamany...

 

srand(time(NULL));

 

lub

 

int liczba;

 

liczba = rand()%9-1;


Poza tym po c**j tyle ifów, pobaw sie switchami, w dodatku takie cos co napisales da sie napisac w 3 linijkach.............

Opublikowano

int liczba;

 

liczba = rand()%9-1;

 

to ci losuje od 0 to 8

 

srand(time(NULL));

 

lub

 

int liczba;

 

liczba = rand()%9-1;

 

to lub to? Że co?

 

Poza tym po c**j tyle ifów, pobaw sie switchami, w dodatku takie cos co napisales da sie napisac w 3 linijkach.............

 

jego kodu nie da się przerobić na switcha

Opublikowano

W takim razie bartussss pokaż jak Ty byś to ze switchami zrobił :)
 

 

srand(time(NULL));

 

lub

 

int liczba;

 

liczba = rand()%9-1;

Ty tak serio? Może zapytam inaczej. Czytałeś temat? Czy ja proszę o losowanie liczb? Chcę się dowiedzieć co zrobić, żeby nie losowało tych samych liczb, czyli gdy tak odrobinkę, tak na prawdę tyci tyci pomyślisz, domyślisz się że wiem jak się losuje, dziękuję i pozdrawiam. Załamka...

Hingui, ciiiiii, na gotowca czekam :D
Tak serio to pobawię się dziś z tym i mam nadzieję, że dam radę :O

BTW. Co to "bool"? :O

EDIT:

 

#include <iostream>
#include <cstdlib>
#include <ctime>

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
   
    int i = 0;
    do
    {
        if( tab[ i ] == iLiczba )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}

int wylosuj()
{
    return( rand() % 10 );
}

int main()
{
    srand( time( NULL ) );
    int wylosowane[ 5 ];
    int wylosowanych = 0;
    do
    {
        int liczba = wylosuj();
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        } //if
    } while( wylosowanych < 4 );
   
    wylosowanych = 0;
    do
    {
        std::cout << wylosowane[ wylosowanych ] << std::endl;
        wylosowanych++;
    } while( wylosowanych < 4 );
   
    return 0;
}

 



Jest ktoś w stanie mi to wytłumaczyć?

Opublikowano
#include <iostream>

#include <windows.h>

#include <time.h>

using namespace std;

 

// Kompilator: CodeBlocks

// System: Windows 7

 

int main()

{

 

///////////////////////// ALGORYTM LOSOWANIA BEZ POWTORZEN //////////////////////

srand(time(NULL));

 

    int ile_pytan = 20; //z ilu pytan losujemy?

    int ile_wylosowac = 5; //ile pytan wylosowac?

    int ile_juz_wylosowano=0; //zmienna pomocnicza

    int *wylosowane = new int[ile_wylosowac+1]; //rezerwacja tablicy

    bool losowanie_ok;

 

    for (int i=1; i<=ile_wylosowac; i++)

    {

do

{

            int liczba=rand()%ile_pytan+1; //losowanie w C++

            losowanie_ok=true;

 

for (int j=1; j<=ile_juz_wylosowano; j++)

{

//czy liczba nie zostala juz wczesniej wylosowana?

if (liczba==wylosowane[j]) losowanie_ok=false;

}

 

if (losowanie_ok==true)

{

//mamy unikatowa liczbe, zapiszmy ja do tablicy

ile_juz_wylosowano++;

wylosowane[ile_juz_wylosowano]=liczba;

}

} while(losowanie_ok!=true);

    }

 

///////////////////////// ZOBACZ REZULTATY LOSOWANIA //////////////////////

 

cout<<"Wylosowane numery: ";

    for (int i=1; i<=ile_wylosowac; i++)

    {

cout<<wylosowane<<" ";

}

 

 

    return 0;

}

 

 

 

NA SZYBKO

Opublikowano

 

#include <iostream>
#include <windows.h>
#include <time.h>
using namespace std;
 
// Kompilator: CodeBlocks
// System: Windows 7
 
int main()
{
 
///////////////////////// ALGORYTM LOSOWANIA BEZ POWTORZEN //////////////////////
srand(time(NULL));
 
    int ile_pytan = 20; //z ilu pytan losujemy?
    int ile_wylosowac = 5; //ile pytan wylosowac?
    int ile_juz_wylosowano=0; //zmienna pomocnicza
    int *wylosowane = new int[ile_wylosowac+1]; //rezerwacja tablicy
    bool losowanie_ok;
 
    for (int i=1; i<=ile_wylosowac; i++)
    {
do
{
            int liczba=rand()%ile_pytan+1; //losowanie w C++
            losowanie_ok=true;
 
for (int j=1; j<=ile_juz_wylosowano; j++)
{
//czy liczba nie zostala juz wczesniej wylosowana?
if (liczba==wylosowane[j]) losowanie_ok=false;
}
 
if (losowanie_ok==true)
{
//mamy unikatowa liczbe, zapiszmy ja do tablicy
ile_juz_wylosowano++;
wylosowane[ile_juz_wylosowano]=liczba;
}
} while(losowanie_ok!=true);
    }
 
///////////////////////// ZOBACZ REZULTATY LOSOWANIA //////////////////////
 
cout<<"Wylosowane numery: ";
    for (int i=1; i<=ile_wylosowac; i++)
    {
cout<<wylosowane<<" ";
}
 
 
    return 0;
}
 
 
 
NA SZYBKO

 

Wyskakujesz ze wskaźnikami.

To jest początkujący.

Prosił o analizę konkretnego kodu, a ty dajesz swój.

W dodatku ten kolor...

Opublikowano

Weż randa i kolejne liczby wrzucaj do tablicy jednocześnie sprawdzając czy już się w niej taka znalazła: jeśli tak - wylosuj nową, jeśli nie - dodaj do tablicy i losuj dalej

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

To w końcu ma być C czy C++?

int wylosowane[ile_liczb];

for (int i=0; i<ile_liczb; i++)
{
losuj:
	int los = rand()%9+1;
	for (int j=0; j<i; j++)
		if (wylosowane[j] == los)
			goto losuj;
}

it's a joke, of kors ; O

 

YOU MUST DIE

- Ganon, Koridai

Opublikowano

OczkoSX, jako iż jestem początkujący, mógłbyś mi pokazać jak to ma wyglądać? :O

 

mirraseq, C++, a kod ten sprawdzę jak będę w domu :P

Opublikowano
OczkoSX, jako iż jestem początkujący, mógłbyś mi pokazać jak to ma wyglądać? :O

 

Masz już dwa kody tą metodą. Swój i tego batussa trolla.

Opublikowano

 

 

#include <iostream>
#include <cstdlib>
#include <ctime>

bool czyBylaWylosowana( int iLiczba, int tab[], int ile )
{
   
    int i = 0;
    do
    {
        if( tab[ i ] == iLiczba )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}

int wylosuj()
{
    return( rand() % 10 );
}

int main()
{
    srand( time( NULL ) );
    int wylosowane[ 5 ];
    int wylosowanych = 0;
    do
    {
        int liczba = wylosuj();
        if( czyBylaWylosowana( liczba, wylosowane, wylosowanych ) == false )
        {
            wylosowane[ wylosowanych ] = liczba;
            wylosowanych++;
        } //if
    } while( wylosowanych < 4 );
   
    wylosowanych = 0;
    do
    {
        std::cout << wylosowane[ wylosowanych ] << std::endl;
        wylosowanych++;
    } while( wylosowanych < 4 );
   
    return 0;
}

 

 

Ten kod zamieszczony został na stronie cpp0x.pl. Losuje bardzo dobrze, ale ja chciałbym aby każda liczba była przypisana do zmiennej, a nie została po prostu wyświetlona :c

Opublikowano

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...